package model.entidades;
import java.util.HashSet;
import java.util.Set;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.OneToOne;
import javax.persistence.Table;

@Entity 
@Table(name="convenio", schema="public")
public class Convenio implements Comparable<Convenio> {

	@Id
	@GeneratedValue
	private int id;
	
	@Column(nullable = false)
	private String razaoSocial;
	@Column(nullable = false, unique = true)
	private String cnpj;
	@Column(nullable = false, unique = true)
	private String nomeExibicao;
	@Column(nullable = false)
	private String tipo; //integral ou %desconto
	
	private String email;
	private String telefone1;
	private String telefone2;
	
	@Column(columnDefinition="text")
	private String informacoesAdicionais;
	
	private Double percentualDescontoMaximo; 
	
	@Column(nullable = false)
	private String situacao;
	
	@OneToOne
	private EnderecoConvenio endereco;
	
	@ManyToMany
	@JoinTable(name="profissional_convenio", joinColumns = {@JoinColumn(name = "id_convenio")}, inverseJoinColumns={@JoinColumn(name="id_usuario")})
	private Set<Usuario> listaProfissionaisConveniados = new HashSet<Usuario>();

	/**
	 * @param id
	 * @param razaoSocial
	 * @param cnpj
	 * @param nomeExibicao
	 * @param tipo
	 * @param email
	 * @param telefone1
	 * @param telefone2
	 * @param informacoesAdicionais
	 * @param percentualDescontoMaximo
	 * @param situacao
	 * @param endereco
	 * @param listaProfissionaisConveniados
	 */
	public Convenio(int id, String razaoSocial, String cnpj,
			String nomeExibicao, String tipo, String email, String telefone1,
			String telefone2, String informacoesAdicionais,
			Double percentualDescontoMaximo, String situacao,
			EnderecoConvenio endereco,
			Set<Usuario> listaProfissionaisConveniados) {
		
		super();
		this.id = id;
		this.razaoSocial = razaoSocial;
		this.cnpj = cnpj;
		this.nomeExibicao = nomeExibicao;
		this.tipo = tipo;
		this.email = email;
		this.telefone1 = telefone1;
		this.telefone2 = telefone2;
		this.informacoesAdicionais = informacoesAdicionais;
		this.percentualDescontoMaximo = percentualDescontoMaximo;
		this.situacao = situacao;
		this.endereco = endereco;
		this.listaProfissionaisConveniados = listaProfissionaisConveniados;
		
	}
	
	/**
	 * @param razaoSocial
	 * @param cnpj
	 * @param nomeExibicao
	 * @param tipo
	 * @param percentualDescontoMaximo 
	 * @param situacao
	 * @param endereco
	 */
	public Convenio(String razaoSocial, String cnpj, String nomeExibicao,
			String tipo, Double percentualDescontoMaximo, String situacao, EnderecoConvenio endereco) {
		
		super();
		this.razaoSocial = razaoSocial;
		this.cnpj = cnpj;
		this.nomeExibicao = nomeExibicao;
		this.tipo = tipo;
		this.percentualDescontoMaximo = percentualDescontoMaximo;
		this.situacao = situacao;
		this.endereco = endereco;
		
	}

	/**
	 * 
	 */
	public Convenio() {
		super();
	}

	/**
	 * @return the id
	 */
	public int getId() {
		return id;
	}

	/**
	 * @param id the id to set
	 */
	public void setId(int id) {
		this.id = id;
	}

	/**
	 * @return the razaoSocial
	 */
	public String getRazaoSocial() {
		return razaoSocial;
	}

	/**
	 * @param razaoSocial the razaoSocial to set
	 */
	public void setRazaoSocial(String razaoSocial) {
		this.razaoSocial = razaoSocial;
	}

	/**
	 * @return the cnpj
	 */
	public String getCnpj() {
		return cnpj;
	}

	/**
	 * @param cnpj the cnpj to set
	 */
	public void setCnpj(String cnpj) {
		this.cnpj = cnpj;
	}

	/**
	 * @return the nomeExibicao
	 */
	public String getNomeExibicao() {
		return nomeExibicao;
	}

	/**
	 * @param nomeExibicao the nomeExibicao to set
	 */
	public void setNomeExibicao(String nomeExibicao) {
		this.nomeExibicao = nomeExibicao;
	}

	/**
	 * @return the tipo
	 */
	public String getTipo() {
		return tipo;
	}

	/**
	 * @param tipo the tipo to set
	 */
	public void setTipo(String tipo) {
		this.tipo = tipo;
	}

	/**
	 * @return the email
	 */
	public String getEmail() {
		return email;
	}

	/**
	 * @param email the email to set
	 */
	public void setEmail(String email) {
		this.email = email;
	}

	/**
	 * @return the telefone1
	 */
	public String getTelefone1() {
		return telefone1;
	}

	/**
	 * @param telefone1 the telefone1 to set
	 */
	public void setTelefone1(String telefone1) {
		this.telefone1 = telefone1;
	}

	/**
	 * @return the telefone2
	 */
	public String getTelefone2() {
		return telefone2;
	}

	/**
	 * @param telefone2 the telefone2 to set
	 */
	public void setTelefone2(String telefone2) {
		this.telefone2 = telefone2;
	}

	/**
	 * @return the informacoesAdicionais
	 */
	public String getInformacoesAdicionais() {
		return informacoesAdicionais;
	}

	/**
	 * @param informacoesAdicionais the informacoesAdicionais to set
	 */
	public void setInformacoesAdicionais(String informacoesAdicionais) {
		this.informacoesAdicionais = informacoesAdicionais;
	}

	/**
	 * @return the percentualDescontoMaximo
	 */
	public Double getPercentualDescontoMaximo() {
		return percentualDescontoMaximo;
	}

	/**
	 * @param percentualDescontoMaximo the percentualDescontoMaximo to set
	 */
	public void setPercentualDescontoMaximo(Double percentualDescontoMaximo) {
		this.percentualDescontoMaximo = percentualDescontoMaximo;
	}

	/**
	 * @return the situacao
	 */
	public String getSituacao() {
		return situacao;
	}

	/**
	 * @param situacao the situacao to set
	 */
	public void setSituacao(String situacao) {
		this.situacao = situacao;
	}

	/**
	 * @return the endereco
	 */
	public EnderecoConvenio getEndereco() {
		return endereco;
	}

	/**
	 * @param endereco the endereco to set
	 */
	public void setEndereco(EnderecoConvenio endereco) {
		this.endereco = endereco;
	}

	/**
	 * @return the listaProfissionaisConveniados
	 */
	public Set<Usuario> getListaProfissionaisConveniados() {
		return listaProfissionaisConveniados;
	}

	/**
	 * @param listaProfissionaisConveniados the listaProfissionaisConveniados to set
	 */
	public void setListaProfissionaisConveniados(
			Set<Usuario> listaProfissionaisConveniados) {
		this.listaProfissionaisConveniados = listaProfissionaisConveniados;
	}

	/* (non-Javadoc)
	 * @see java.lang.Object#toString()
	 */
	@Override
	public String toString() {
		return getNomeExibicao();
	}
	
	@Override
	public int compareTo(Convenio convenio) {
		return getNomeExibicao().compareTo(convenio.getNomeExibicao());
	}

}//Convenio.class